package com.ls.server.controller;

import com.ls.server.dto.ChatQueryDTO;
import com.ls.server.dto.ChatSessionDTO;
import com.ls.server.service.ChatSessionService;
import com.ls.server.vo.ChatSessionVO;
import com.ls.server.vo.PageResult;
import com.ls.server.vo.Result;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 聊天会话控制器
 */
@RestController
@RequestMapping("/chat/session")
public class ChatSessionController {

    private final ChatSessionService chatSessionService;

    public ChatSessionController(ChatSessionService chatSessionService) {
        this.chatSessionService = chatSessionService;
    }

    /**
     * 分页查询会话
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    @PostMapping("/page")
    public Result<PageResult<ChatSessionVO>> page(@RequestBody ChatQueryDTO queryDTO) {
        return Result.success(chatSessionService.page(queryDTO));
    }

    /**
     * 获取用户的所有会话
     * @param userId 用户ID
     * @return 会话列表
     */
    @GetMapping("/list/{userId}")
    public Result<List<ChatSessionVO>> listByUserId(@PathVariable Long userId) {
        return Result.success(chatSessionService.listUserSessions(userId));
    }

    /**
     * 根据会话ID查询会话
     * @param sessionId 会话ID
     * @return 会话信息
     */
    @GetMapping("/get/{sessionId}")
    public Result<ChatSessionVO> getBySessionId(@PathVariable String sessionId) {
        return Result.success(chatSessionService.getSessionById(sessionId));
    }

    /**
     * 创建会话
     * @param dto 会话信息
     * @return 会话ID
     */
    @PostMapping
    public Result<String> create(@RequestBody ChatSessionDTO dto) {
        return Result.success(chatSessionService.createSession(dto));
    }

    /**
     * 更新会话
     * @param dto 会话信息
     * @return 操作结果
     */
    @PutMapping
    public Result<Boolean> update(@RequestBody ChatSessionDTO dto) {
        return Result.success(chatSessionService.updateSession(dto));
    }

    /**
     * 删除会话
     * @param sessionId 会话ID
     * @return 操作结果
     */
    @DeleteMapping("/{sessionId}")
    public Result<Boolean> delete(@PathVariable String sessionId) {
        return Result.success(chatSessionService.deleteSession(sessionId));
    }
} 